﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FeatureDetection.Converter {
    public class EnumRadioConverter : System.Windows.Data.IValueConverter{
        
        /// <summary>
        /// Enum → bool
        /// </summary>
        public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) {
            //バインドする列挙値の文字列表記がパラメータに渡されているか
            var paramString = parameter as string;
            if(paramString == null) {
                return System.Windows.DependencyProperty.UnsetValue;
            }

            //パラメータがEnumの値として正しいか
            if(!Enum.IsDefined(value.GetType(), paramString)) {
                return System.Windows.DependencyProperty.UnsetValue;
            }

            //パラメータをEnumに変換
            var paramParsed = Enum.Parse(value.GetType(), paramString);

            //値が一致すればtrueを返す
            return value.Equals(paramParsed);
        }

        /// <summary>
        /// bool → Enum
        /// </summary>
        public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) {
            //バインドする列挙値の文字列表記がパラメータに渡されているか
            var paramString = parameter as string;
            if(paramString == null) {
                return System.Windows.DependencyProperty.UnsetValue;
            }

            //チェックが入っているか
            var isChecked = (bool?)value ?? false;
            if(!isChecked) {
                return System.Windows.DependencyProperty.UnsetValue;
            }

            //列挙型にパースして返す
            return Enum.Parse(targetType, paramString);
        }
    }
}
